#ifndef __MY_DRIVER_H__
#define __MY_DRIVER_H__

#define DRVNAME     L"\\Device\\MyDriver"
#define DOSDRVNAME  L"\\DosDevices\\MyDriverTest"

DRIVER_INITIALIZE DriverEntry;

__drv_dispatchType(IRP_MJ_CREATE)
DRIVER_DISPATCH CreateMyDriver;

__drv_dispatchType(IRP_MJ_CLOSE)
DRIVER_DISPATCH CloseMyDriver;

__drv_dispatchType(IRP_MJ_WRITE)
DRIVER_DISPATCH WriteMyDriver;

DRIVER_UNLOAD UnloadMyDriver;

BOOLEAN IsStringTerminated(PUCHAR pString, ULONG length);

/* super secret prototypes and definitions */
typedef VOID (*INBV_DISPLAY_STRING_FILTER)(PUCHAR *Str);

NTKERNELAPI VOID InbvEnableBootDriver(BOOLEAN bEnable);
NTKERNELAPI VOID InbvAcquireDisplayOwnership(VOID);
NTKERNELAPI BOOLEAN InbvResetDisplay();
NTKERNELAPI VOID InbvSolidColorFill(ULONG x1, ULONG y1, ULONG x2, ULONG y2, ULONG color);
NTKERNELAPI ULONG InbvSetTextColor(ULONG Color);
NTKERNELAPI VOID InbvInstallDisplayStringFilter(INBV_DISPLAY_STRING_FILTER DisplayStringFilter);
NTKERNELAPI BOOLEAN InbvEnableDisplayString(BOOLEAN bEnable);
NTKERNELAPI VOID InbvSetScrollRegion(ULONG x1, ULONG y1, ULONG x2, ULONG y2);
NTKERNELAPI BOOLEAN InbvDisplayString(PUCHAR Str);

#ifdef ALLOC_PRAGMA
#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(PAGE, UnloadMyDriver)
#pragma alloc_text(PAGE, CreateMyDriver)
#pragma alloc_text(PAGE, CloseMyDriver)
#pragma alloc_text(PAGE, WriteMyDriver)
#pragma alloc_text(PAGE, IsStringTerminated)
#endif /* ALLOC_PRAGMA */

#endif /* __MY_DRIVER_H__ */